# -*- coding: utf-8 -*-
__author__ = 'Paul'
from Products.CMFCore.utils import getToolByName
from zope.component import getMultiAdapter
from Products.ATContentTypes.interfaces.image import IATImage
from Acquisition import aq_parent,aq_base,aq_inner
class Utilidades(object):
    """Herramientas de uso general"""

    def dameSeccion(self, contexto):
        """devuelve la seccion en la que me encuentro"""
        secTMP= contexto.getPhysicalPath()
        try:
            numI=secTMP.index("intereses")
            if len(secTMP)-1>=numI+1:
                seccion=secTMP[numI+1]
                return seccion
            else:
                return None

        except ValueError:
            numI=secTMP.index("home")
            if len(secTMP)-1>=numI+1:
                seccion=secTMP[numI+1]
                return seccion
            else:
                return None
            return None

    def dameRutaSeccion(self,contexto):
        """devuelve la ruta en la sección en la que esta
        """
        partes=contexto.getPhysicalPath()
        try:
            posRecr=partes.index("intereses")+2
            ruta="/".join(partes[0:posRecr])
        except :
            return None

        return ruta

    def dameEstadoDelObjecto(self,contexto,objeto):
        """Dado un OBJETO no BRAIN, devuleve el estado de workflow de un documento"""
        from zope.i18n import translate

        pw = getToolByName(contexto, 'portal_workflow')
        esta=""
        miWFNames=pw.getChainForPortalType(objeto.portal_type)
        if len(miWFNames)==0:            
            return (esta,esta)


        try:
            objEstadoId=pw.getInfoFor(objeto,'review_state')
            objEstadoTitle=pw[miWFNames[0]].states[objEstadoId].title
        except:
            return (esta,esta)

        if objEstadoTitle =="Public draft":
            objEstadoTitle="Borrador público"
        elif objEstadoTitle =="Pending review":
            objEstadoTitle="Pendiente de revision"
        elif objEstadoTitle =="Private":
            objEstadoTitle="Privado"
        else:
            objEstadoTitle="Publicado"


        return (objEstadoId,objEstadoTitle)

    def cortaTexto(self,texto,numCaracteres):
        """Devuelve un texto cortado al ultimo espacio encontrado antes del numero
                de caracteres dado"""
        if len(texto)>numCaracteres:
            subT=texto[:numCaracteres]
            final=subT[:subT.rfind(" ")]
            return  final
        return False


    def dameNovedades(self,contexto,request,catalogo,limit=3):
        """Devuelve a los portlets de la HOME el diccionario de noverdads"""
        portal_state = getMultiAdapter((contexto, request), name=u'plone_portal_state')
        self.portal = getMultiAdapter((contexto, request),name=u'plone_portal_state').portal()
        self.catalog=catalogo
        ListaTipos=("Products.bpContents.articulo",
                    "Products.bpContents.galeria",
                    "Products.bpContents.evento",
                    "Products.bpContents.libro",
                    "Document")
        total=[]
        self.idCanal=""

        path = "%s/home/intereses" %self.portal.getPhysicalPath()[1]

        resu = catalogo(portal_type=ListaTipos,
            path=path,
            sort_on='Date',
            sort_order='reverse',
            review_state="published",
            sort_limit=limit)[:limit]

        for elem in resu:
            elemO=contexto.unrestrictedTraverse(elem.getPath())
            dummy=dict()
            dummy["id"]=elem.id
            dummy["titulo"]=elem.Title
            dummy["resumen"]=elem.Description
            dummy["url"]=elem.getURL()
            dummy["imagen"]=self.getIMG(elem.getPath())
            dummy["tipo"]=elem.portal_type
            dummy["canal"]  =self.getDameTuCanal(elemO)
            total.append(dummy)

        return total

    def getIMG(self,ruta):
        """AUXILIAR DE DAMENOVEDADES"""
        if not isinstance(ruta,basestring):
            ruta="/".join(ruta)
            padreObj=self.portal.unrestrictedTraverse(ruta)

        padreObj=self.portal.unrestrictedTraverse(ruta)

        if padreObj.portal_type=="Products.bpContents.libro":
            try:
                if padreObj.portada==None:
                  return None
                else:
                    return padreObj.portada
            except AttributeError:
                return None

        else:
            baseQ={'object_provides' : (IATImage.__identifier__,),
            'allowedRolesAndUsers' : ('Anonymous',),
            'path': {'query': ruta, 'depth': 1},
            }
            search=self.catalog(baseQ,sort_on='modified',sort_order='reverse')

            if len(search)>0:
                img=padreObj[search[0].id]
                return img
            else:
                return None

    def getDameTuCanal(self,obj):
        """AUXILIAR DE DAMENOVEDADES"""
        padre=aq_parent(obj)
        folderId=obj.getPhysicalPath()
        rutaPadre=padre.absolute_url()
        idCat=""
        categoria=""

        if "apoyo_educacion" in folderId or  "apoyo-a-la-educacion" in  folderId:
            categoria="Apoyo a la Educación"
            idCat="apoyo-a-la-educacion"
        elif "recreacion" in folderId:
            categoria=padre.Title()
            idCat="recreacion"
        elif "investigacion" in folderId:
            categoria="Investigación"
            idCat="investigacion"
        else:
            categoria=padre.Title()[0].upper()+padre.Title()[1:]
            idCat="curiosidades"

        pp=(categoria,rutaPadre,idCat)

        return pp
